#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
WigoTravelChat Update Real User IDs Script
将WigoTravelChatUserId更新为真实的用户ID
"""

import json
import os
import sys

def kumiBadUpdateRealUserIds(file_path=None, prefix=None):
    """更新JSON文件中的用户ID为真实用户ID

    Args:
        file_path (str, optional): JSON文件路径，如果不提供则提示用户输入
        prefix (str, optional): 字段前缀，如果不提供则提示用户输入
    """

    # 真实的用户ID列表
    kumiBadRealUserIds = [
        "689174f8e0c6c158323b96d0",
        "689174f8e0c6c158323b96cf",
        "689174f8e0c6c158323b96ce",
        "689174f8e0c6c158323b96cd",
        "689174f8e0c6c158323b96cc",
        "689174f8e0c6c158323b96cb",
        "689174f8e0c6c158323b96ca",
        "689174f8e0c6c158323b96c9",
        "689174f8e0c6c158323b96c8",
        #   审核账号 - Yoke
        "68fb3386c29a3849f858ea54" 
    ]

    # 如果没有提供文件路径，则提示用户输入
    if file_path is None:
        print("🔍 请输入JSON文件路径:")
        print("   - 可以是绝对路径 (如: /path/to/file.json)")
        print("   - 可以是相对路径 (如: data/file.json)")
        print("   - 直接按回车使用默认文件: WigoTravelChatTripMockData.json")

        user_input = input("📁 文件路径: ").strip()

        # 如果用户直接按回车，使用默认文件
        if not user_input:
            file_path = 'WigoTravelChatTripMockData.json'
            print(f"📋 使用默认文件: {file_path}")
        else:
            file_path = user_input

    # 如果没有提供前缀，则提示用户输入
    if prefix is None:
        print("\n🏷️ 请输入字段前缀:")
        print("   - 例如: WigoTravelChat, MyProject, AppName 等")
        print("   - 直接按回车使用默认前缀: WigoTravelChat")

        user_prefix = input("🔤 字段前缀: ").strip()

        # 如果用户直接按回车，使用默认前缀
        if not user_prefix:
            prefix = 'WigoTravelChat'
            print(f"📋 使用默认前缀: {prefix}")
        else:
            prefix = user_prefix

    # 检查文件是否存在
    if not os.path.exists(file_path):
        print(f"❌ 错误: 找不到文件 '{file_path}'")
        return False

    try:
        # 读取JSON文件
        print(f"📖 正在读取文件: {file_path}")
        with open(file_path, 'r', encoding='utf-8') as file:
            kumiBadJsonData = json.load(file)
        
        # 构建字段名
        user_id_field = f'{prefix}UserId'
        user_info_field = f'{prefix}UserInfo'
        name_field = f'{prefix}Name'

        # 更新每个旅行数据的用户ID
        kumiBadUpdatedCount = 0
        kumiBadTotalRecords = len(kumiBadJsonData)

        for kumiBadIndex, kumiBadTrip in enumerate(kumiBadJsonData):
            # 增加默认字段
            kumiBadTrip['isDis'] = True

             # 删除不需要default字段
            if 'createdAt' in kumiBadTrip:
                del kumiBadTrip['createdAt']
            
            if 'updatedAt' in kumiBadTrip:
                del kumiBadTrip['updatedAt']

            # 循环使用用户ID列表
            kumiBadUserIdIndex = kumiBadIndex % len(kumiBadRealUserIds)
            kumiBadNewUserId = kumiBadRealUserIds[kumiBadUserIdIndex]

            # 更新用户ID字段
            kumiBadTrip[user_id_field] = kumiBadNewUserId

            # 同时更新UserInfo中的objectId ， 转换为Pointer格式
            kumiBadTrip[user_info_field] = {
                    "__type": "Pointer",
                    "className": "_User",
                    "objectId": kumiBadNewUserId
                }

            kumiBadUpdatedCount += 1

            print(f"📝 记录 {kumiBadIndex + 1}: {kumiBadTrip.get(name_field, 'Unknown')} -> 用户ID: {kumiBadNewUserId}")

        # 保存更新后的JSON文件
        print(f"💾 正在保存文件: {file_path}")
        with open(file_path, 'w', encoding='utf-8') as file:
            json.dump(kumiBadJsonData, file, indent=2, ensure_ascii=False)

        print(f"\n✅ 用户ID更新完成！")
        print(f"📊 总共更新了 {kumiBadUpdatedCount} 条记录")
        print(f"👥 使用了 {len(kumiBadRealUserIds)} 个真实用户ID")

        # 显示用户ID分配统计
        print(f"\n📈 用户ID分配统计:")
        kumiBadUserIdCount = {}
        for kumiBadTrip in kumiBadJsonData:
            kumiBadUserId = kumiBadTrip.get(user_id_field)
            kumiBadUserIdCount[kumiBadUserId] = kumiBadUserIdCount.get(kumiBadUserId, 0) + 1

        for kumiBadUserId, kumiBadCount in kumiBadUserIdCount.items():
            print(f"   {kumiBadUserId}: {kumiBadCount} 条记录")

        # 验证更新结果
        kumiBadSuccessCount = 0
        for kumiBadTrip in kumiBadJsonData:
            kumiBadUserId = kumiBadTrip.get(user_id_field)
            kumiBadUserInfo = kumiBadTrip.get(user_info_field, {})

            if (kumiBadUserId in kumiBadRealUserIds and
                kumiBadUserInfo.get('objectId') == kumiBadUserId):
                kumiBadSuccessCount += 1

        print(f"\n🔍 验证结果: {kumiBadSuccessCount}/{kumiBadTotalRecords} 条记录成功更新用户ID")
        return True

    except json.JSONDecodeError:
        print(f"❌ 错误: JSON文件格式不正确 '{file_path}'")
        return False
    except Exception as e:
        print(f"❌ 错误: {str(e)}")
        return False

def main():
    """主函数，支持命令行参数"""
    if len(sys.argv) > 1:
        # 如果提供了命令行参数
        file_path = sys.argv[1]
        prefix = sys.argv[2] if len(sys.argv) > 2 else None
        print(f"📋 使用命令行参数指定的文件: {file_path}")
        if prefix:
            print(f"🏷️ 使用命令行参数指定的前缀: {prefix}")
        kumiBadUpdateRealUserIds(file_path, prefix)
    else:
        # 否则进入交互模式
        kumiBadUpdateRealUserIds()

if __name__ == "__main__":
    main()
